#ifndef SKILLTREE_H
#define SKILLTREE_H

// 技能类型枚举
typedef enum {
    SKILL_SPEED,     // 速度提升
    SKILL_POWER,     // 吃豆加分
    SKILL_SHIELD,    // 无敌时间
    SKILL_FREEZE     // 冻结幽灵
} SkillType;

// 技能节点结构体
typedef struct SkillNode {
    SkillType type;          // 技能类型
    int level;              // 技能等级
    int points_required;    // 升级所需点数
    char* description;      // 技能描述
    struct SkillNode* left; // 左子节点
    struct SkillNode* right;// 右子节点
} SkillNode;

// 技能树结构体
typedef struct {
    SkillNode* root;        // 根节点
    int total_points;       // 总技能点
    int used_points;        // 已用技能点
} SkillTree;

// 技能树操作函数
void skilltree_init(SkillTree* tree);                    // 初始化技能树
void skilltree_destroy(SkillTree* tree);                 // 销毁技能树
int skilltree_add_points(SkillTree* tree, int points);   // 增加技能点
int skilltree_get_available_points(SkillTree* tree);     // 获取可用技能点

// 技能操作函数
int skilltree_upgrade_skill(SkillTree* tree, SkillType type);  // 升级技能
int skilltree_get_skill_level(SkillTree* tree, SkillType type);// 获取技能等级
float skilltree_get_skill_effect(SkillTree* tree, SkillType type);// 获取技能效果

// 遍历函数
void skilltree_preorder(SkillTree* tree, void (*func)(SkillNode*));  // 前序遍历
void skilltree_inorder(SkillTree* tree, void (*func)(SkillNode*));   // 中序遍历
void skilltree_postorder(SkillTree* tree, void (*func)(SkillNode*)); // 后序遍历

// 绘制函数
void skilltree_draw(SkillTree* tree, int x, int y, int width, int height); // 绘制技能树

#endif 